﻿var Map = function () {
    this.elements = new Array();

    this.size = function () {
        return this.elements.length;
    };

    this.isEmpty = function () {
        return (this.elements.length < 1);
    };

    this.clear = function () {
        this.elements.length = 0;
    };

    this.put = function (_key, _value) {
        this.elements.push({
            key: _key,
            value: _value
        });
    };

    this.removeByValue = function (_value) {
        try {
            if (this.containsValue(_value))
                for (var i = 0; i < this.size(); i++) {
                    if (this.elements[i].value === _value) {
                        this.elements.splice(i, 1);
                        return true;
                    }
                }
            else
                return true;
        } catch (e) {
            return false;
        }
        return false;
    };

    this.remove = function (_key) {
        try {
            if (this.containsKey(_key))
                for (var i = 0; i < this.size(); i++) {
                    if (this.elements[i].key === _key) {
                        this.elements.splice(i, 1);
                        return true;
                    }
                }
            else
                return true;
        } catch (e) {
            return false;
        }
        return false;
    };

    this.get = function (_key) {

        try {
            for (var i = 0; i < this.size(); i++) {
                if (this.elements[i].key === _key) {
                    var _value = this.elements[i].value;
                    return _value;
                }
            }
        } catch (e) {
            return null;
        }
        return null;
    };

    this.containsKey = function (_key) {
        try {
            for (var i = 0; i < this.size(); i++) {
                if (this.elements[i].key === _key) {
                    return true;
                }
            }
        } catch (e) {
            return false;
        }
        return false;
    };
    this.containsValue = function (_value) {
        try {
            for (var i = 0; i < this.size(); i++) {
                if (this.elements[i].value === _value) {
                    return true;
                }
            }
        } catch (e) {
            return false;
        }
        return false;
    };


    this.getValues = function () {
        var values = new Array();
        try {
            for (var i = 0; i < this.size(); i++) {
                values.push(this.elements[i].value);
            }
        } catch (e) {
            alert("Can not get Map Values ! {1}" + e.message);
            return null;
        }
        return values;
    };

    this.getKeys = function () {
        var keys = new Array();
        try {
            for (var i = 0; i < this.size(); i++) {
                keys.push(this.elements[i].key);
            }
        } catch (e) {
            alert("Can not get Map Keys ! {1}" + e.message);
            return null;
        }
        return keys;
    };

    this.mapStr = function () {
        return this.elements.toString();

    };

};  